# 编译器
CXX = g++
# 编译选项
CXXFLAGS = -std=c++17 -Wall $(addprefix -I, $(INC_DIRS))  # 使用 addprefix 添加 -I 选项
# 链接选项
LDFLAGS = -lpthread -ldl -lsqlite3

# 源文件目录
SRC_DIRS = /usr/include ./nlohmann User UserManager Device DeviceManager Log LogManager ConfigManager DatabaseManager ThreadPool ExceptionHandler
# 头文件目录
INC_DIRS = $(SRC_DIRS)

# 源文件
SRCS = main.cpp $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.cpp))
# 目标文件
OBJS = $(patsubst %.cpp, %.o, $(SRCS))
# 可执行文件
TARGET = smart_home_system

# 默认目标
all: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

# 编译规则
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 清理
clean:
	rm -f $(OBJS) $(TARGET)

.PHONY: all clean
